package com.tanhua.server.service;

import com.tanhua.commons.exception.TanHuaException;
import com.tanhua.domain.db.User;
import com.tanhua.domain.db.UserInfo;
import com.tanhua.domain.vo.CountsVo;
import com.tanhua.domain.vo.ErrorResult;
import com.tanhua.domain.vo.UserInfoVo;
import com.tanhua.dubbo.api.UserInfoApi;
import com.tanhua.server.interceptor.UserHolder;
import com.tanhua.server.utils.GetAgeUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 用户信息业务逻辑处理层
 */
@Service
@Slf4j
public class UserInfoService {

    @Autowired
    private UserService userService;

    @Reference
    private UserInfoApi userInfoApi;

    /**
     * 获取用户基础信息
     * @param userToken
     * @param inputUserId
     * @return
     */
    public UserInfoVo getUserInfo(String userToken, Long inputUserId) {
        log.debug("*******************获取用户基础信息:::"+UserHolder.getUserId());
        //a.根据Token获取User对象，如果不存在 登录超时
       /* User user = userService.getUserByToken(userToken);
        if(user == null){
            throw new TanHuaException(ErrorResult.loginTimeOut());
        }*/
        if(inputUserId == null){
            inputUserId = UserHolder.getUserId();
        }
        //b.根据用户id查询用户信息返回UserInfo
        UserInfo userInfo = userInfoApi.findByUserId(inputUserId);
        //c.将UserInfo转为UserInfoVo 返回
        UserInfoVo userInfoVo = new UserInfoVo();
        BeanUtils.copyProperties(userInfo,userInfoVo);
        // 年龄字段，数据库存的是数值，而页面需要的是字符串。
        if(null != userInfo.getAge()){
            userInfoVo.setAge(String.valueOf(userInfo.getAge().intValue()));
        }
        return  userInfoVo;

    }

    /**
     * 更新用户信息
     */
    public void updateUserInfo(String userToken, UserInfoVo userInfoVo) {
        log.debug("*******************更新用户信息:::"+UserHolder.getUserId());
        //a.根据Token获取User对象，如果不存在 登录超时
       /* User user = userService.getUserByToken(userToken);
        if(user == null){
            throw new TanHuaException(ErrorResult.loginTimeOut());
        }*/
        //创建UserInfo对象
        UserInfo userInfo = new UserInfo();
        //b.将UserInfoVo转为UserInfo
        BeanUtils.copyProperties(userInfoVo,userInfo);
        //年龄
        int age = GetAgeUtil.getAge(userInfoVo.getBirthday());
        userInfo.setAge(age);//用户年龄
        //userId
        userInfo.setId(UserHolder.getUserId());//用户id
        //c.调用服务提供者 操作数据传入参数UserInfo(根据生日算出年龄保存)
        userInfoApi.update(userInfo);
    }


}
